package org.example.utils.map;

import org.junit.jupiter.api.Test;
import org.springframework.util.LinkedCaseInsensitiveMap;

import java.util.HashMap;
import java.util.Map;

/**
 * Map API 测试
 *
 * @author wangMaoXiong
 * @version 1.0
 * @date 2022/3/4 10:05
 */
public class MapTest2 {

    /**
     * default V getOrDefault(Object key, V defaultValue)：返回指定键所映射的值，如果没有这个 key，则返回默认值 defaultValue
     */
    @Test
    public void testGetOrDefault() {
        Map<String, Object> dataMap = new HashMap<>();
        dataMap.put("id", "");
        dataMap.put("name", "华南");
        dataMap.put("age", null);

        //华南
        System.out.println(dataMap.getOrDefault("name", ""));
        //输出空
        System.out.println(dataMap.getOrDefault("id", "xx"));
        //null
        System.out.println(dataMap.getOrDefault("age", "yy"));
        //500
        System.out.println(dataMap.getOrDefault("code", "500"));
    }

    /**
     * default V putIfAbsent(K key, V value)：如果指定的 key 不存在，或值 null，则继续设置，否则不设置。
     * key 不存在，或值 null 时，返回 null，否则返回当前值。
     */
    @Test
    public void testPutIfAbsent() {
        Map<String, Object> dataMap = new HashMap<>();
        dataMap.put("id", "");
        dataMap.put("name", "华南");
        dataMap.put("age", null);

        Object ifAbsentId = dataMap.putIfAbsent("id", "1001");
        Object ifAbsentName = dataMap.putIfAbsent("name", "华安");
        Object ifAbsentAge = dataMap.putIfAbsent("age", "32");
        Object ifAbsentSex = dataMap.putIfAbsent("sex", "男");

        // ,华南,null,null
        System.out.println(ifAbsentId + "," + ifAbsentName + "," + ifAbsentAge + "," + ifAbsentSex);

        // {sex=男, name=华南, id=, age=32}
        System.out.println(dataMap);
    }

    /**
     * {@link org.springframework.util.LinkedCaseInsensitiveMap} 以不区分大小写的方式存储字符串的 key 。
     * key 不支持存储 null.
     */
    @Test
    public void testLinkedCaseInsensitiveMap() {
        Map<String, Object> caseInsensitiveMap = new LinkedCaseInsensitiveMap<>();
        caseInsensitiveMap.put("code", 200);
        caseInsensitiveMap.put("msg", "key 不区分大小写");

        // {code=200, msg=key 不区分大小写}
        System.out.println(caseInsensitiveMap);
        // 200
        System.out.println(caseInsensitiveMap.get("CODE"));
        caseInsensitiveMap.put("CODE", 500);
        // 500
        System.out.println(caseInsensitiveMap.get("code"));
    }


}
